using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using TestImport.View.Lijsten;
using TestImport.Model;

namespace TestImport.View.BeherenBestanden
{
    public partial class BoekBeheer : TestImport.View.BeherenBestanden.SuperFilter
    {
        private enum j { boekid = 0, titel, isbn, categorie, boeklijst, voorraad, huurboek, llbes, llretour, llafhaal, platobes, platoannul, platoretour, platolever };
        private String filterTekstSoort;
        private bool isnew;
        private bool isPlatoBoek;
        private bool inBoekLijst;
        private bool isValide;
        private bool isStock;

        private string oudIsbnNr; //bij klikken op bestelbaar bij plato oorspronkelijk toegekend nr onthouden!!

        private SqlConnection conn = null;
        private SqlCommand getIsbnCommand = null;

        public BoekBeheer(bool inBoekLijst)
        {
            
            InitializeComponent();
            this.BackColor = InstParameters.Default.schermkleur;
            this.panel2.BackColor = InstParameters.Default.schermkleur;
            this.boekBindingNavigator.BindingSource = this.boekBindingSource;
            this.inBoekLijst = inBoekLijst;
            dgvVoorraad1.Visible = false;
            isStock = false;
        }

        public BoekBeheer(bool inBoekLijst, bool stock)
        {
            InitializeComponent();
            this.boekBindingNavigator.BindingSource = this.boekBindingSource;
            this.inBoekLijst = inBoekLijst;
            isStock = true;
            panel2.Enabled = false;
            panel5.Enabled = false;
            boekDataGridView.ReadOnly = false;
            dgvTitel.ReadOnly = true;
            dataGridViewBoeksoort.ReadOnly = true;
            dataGridViewIsbnNr.ReadOnly = true;
            dataGridViewUitgever.ReadOnly = true;
            dataGridViewCategorie.ReadOnly = true;
            btnVoorraad.Visible = true;
            if (isStock && inBoekLijst) btnActueleVoorraad.Visible = true;
        }

        private void BoekBeheer_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.BoekStatus' table. You can move, or remove it, as needed.
            this.boekStatusTableAdapter.Fill(this.onsBoekenPakketDataSet.BoekStatus);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Boeksoort' table. You can move, or remove it, as needed.
            this.boeksoortTableAdapter.Fill(this.onsBoekenPakketDataSet.Boeksoort);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Uitgever' table. You can move, or remove it, as needed.
            this.uitgeverTableAdapter.Fill(this.onsBoekenPakketDataSet.Uitgever);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Categorie' table. You can move, or remove it, as needed.
            this.categorieTableAdapter.Fill(this.onsBoekenPakketDataSet.Categorie);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Boek' table. You can move, or remove it, as needed.
            if (inBoekLijst)
            {
                Text = "Beheer artikels UIT BOEKENLIJST";
                this.boekTableAdapter.FillByIsUitBoeklijst(this.onsBoekenPakketDataSet.Boek);
                if (isStock) Text = "Beheer startvoorraad UIT BOEKENLIJST";
            }
            else
            {
                Text = "Beheer artikels";
                this.boekTableAdapter.Fill(this.onsBoekenPakketDataSet.Boek);
                if (isStock) Text = "Beheer startvoorraad";
            }
            try
            {
                string conString = Properties.Settings.Default.DefaultConnectionString;
                conn = new SqlConnection(conString);
            }
            catch (Exception ex) { ;}
            

        }

        protected override void txtBegin_TextChanged(object sender, EventArgs e)
        {
            base.txtBegin_TextChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void cmbCategorieZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            base.cmbCategorieZoek_SelectedIndexChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void cmbUitgeverZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            base.cmbUitgeverZoek_SelectedIndexChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void cmbStatusZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            base.cmbStatusZoek_SelectedIndexChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void cmbBoeksoortZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            base.cmbBoeksoortZoek_SelectedIndexChanged(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void rbtSchool_CheckedChanged(object sender, EventArgs e)
        {
            base.rbtSchool_CheckedChanged(sender, e);
            this.boekBindingSource.RemoveFilter();
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void rbtPlato_CheckedChanged(object sender, EventArgs e)
        {
            base.rbtPlato_CheckedChanged(sender, e);
            this.boekBindingSource.RemoveFilter();
            this.boekBindingSource.Filter = filterTekst;
        }

        protected override void rbtAlle_CheckedChanged(object sender, EventArgs e)
        {
            base.rbtAlle_CheckedChanged(sender, e);
            this.boekBindingSource.RemoveFilter();
        }

        protected override void btnFilterSamen_Click(object sender, EventArgs e)
        {
            base.btnFilterSamen_Click(sender, e);
            this.boekBindingSource.Filter = filterTekst;
        }

        private void boekDataGridView_SelectionChanged(object sender, EventArgs e)
        {
            if (this.boekDataGridView.CurrentRow != null)
            {
                this.cmbUitgever.SelectedValue = this.boekDataGridView.CurrentRow.Cells["dataGridViewUitgever"].Value;
                this.cmbCategorie.SelectedValue = this.boekDataGridView.CurrentRow.Cells["dataGridViewCategorie"].Value;
                this.cmbBoekStatus.SelectedValue = this.boekDataGridView.CurrentRow.Cells["dataGridViewBoekStatusCode"].Value;
                this.cmbBoekSoort.SelectedValue = this.boekDataGridView.CurrentRow.Cells["dataGridViewBoeksoort"].Value;
                this.lblSchoolPrijsWinst.Text = "(Winst % schoolprijs: " + BerekenSchoolPrijsWinst().ToString() + ")";
                this.lblHuurPrijsPercent.Text = "(Huurprijs " + BerekenHuurPrijsPercent().ToString() + "% van aankoopprijs)";
                // formateer aankoopprijs (2 cijfers na komma)
                Binding bind, bind2, bind3;
                bind = this.txtAankoopprijs.DataBindings["Text"];
                bind.FormatString = "N2";
                bind.FormattingEnabled = true;
                bind2 = this.txtSchoolprijs.DataBindings["Text"];
                bind2.FormatString = "N2";
                bind2.FormattingEnabled = true;
                bind3 = this.txtHuurprijs.DataBindings["Text"];
                bind3.FormatString = "N2";
                bind3.FormattingEnabled = true;
                isPlatoBoek = this.boekDataGridView.CurrentRow.Cells["dataGridViewABoek"].Value.ToString().Equals("True");
                chkHuurboek.Checked = this.boekDataGridView.CurrentRow.Cells["dataGridViewHuurBoek"].Value.ToString().Equals("True");
                if (isPlatoBoek) chkIsBestelbaarBijPlato.Enabled = false;
                lblIsbnrTekst.Text = "";
                oudIsbnNr = this.boekDataGridView.CurrentRow.Cells["dataGridViewIsbnNr"].Value.ToString();
                if (isPlatoBoek) Wis.Enabled = false;
                else Wis.Enabled = true;
                //this.Text = oudIsbnNr;
            }
        }

        private double BerekenSchoolPrijsWinst()
        {
            double winst = 0.0;
            double hAankoop = 0.0;
            Double.TryParse(this.txtAankoopprijs.Text, out hAankoop);
            double hVerkoop = 0.0;
            Double.TryParse(this.txtSchoolprijs.Text, out hVerkoop);
            if (hVerkoop != 0)
                return Math.Round((hVerkoop - hAankoop) / hAankoop * 100, 2);
            return winst;
        }

        private double BerekenHuurPrijsPercent()
        {
            double percent = 0.0;
            double hAankoop = 0.0;
            Double.TryParse(this.txtAankoopprijs.Text, out hAankoop);
            double hHuur = 0.0;
            Double.TryParse(this.txtHuurprijs.Text, out hHuur);
            if (hHuur != 0)
                return Math.Round(hHuur / hAankoop * 100, 2);
            return percent;
        }

        private void txtHuurprijs_Leave(object sender, EventArgs e)
        {
            this.lblHuurPrijsPercent.Text = "(Huurprijs " + BerekenHuurPrijsPercent().ToString() + "% van aankoopprijs)";
        }

        private void txtAankoopprijs_Leave(object sender, EventArgs e)
        {
            this.lblSchoolPrijsWinst.Text = "(Winst % schoolprijs: " + BerekenSchoolPrijsWinst().ToString() + ")";
            this.lblHuurPrijsPercent.Text = "(Huurprijs " + BerekenHuurPrijsPercent().ToString() + "% van aankoopprijs)";
        }

        private void txtSchoolprijs_Leave(object sender, EventArgs e)
        {
            this.lblSchoolPrijsWinst.Text = "(Winst % schoolprijs: " + BerekenSchoolPrijsWinst().ToString() + ")";
        }

        private void switchButtonModus()
        {
            Nieuw.Enabled = !Nieuw.Enabled;
            Wijzig.Enabled = !Wijzig.Enabled;
            Wis.Enabled = !Wis.Enabled;
            Registreer.Enabled = !Registreer.Enabled;
            RegistreerEnNieuw.Enabled = !RegistreerEnNieuw.Enabled;
            Annuleer.Enabled = !Annuleer.Enabled;
            this.boekDataGridView.Enabled = !this.boekDataGridView.Enabled;
        }

        private void switchEnabledModus()
        {
            if (!isPlatoBoek)
            {
                txtTitel.ReadOnly = !txtTitel.ReadOnly;
                txtIsbnNr.ReadOnly = !txtIsbnNr.ReadOnly;
                chkIsBestelbaarBijPlato.Enabled = !chkIsBestelbaarBijPlato.Enabled;
            }
            txtSchoolprijs.ReadOnly = !txtSchoolprijs.ReadOnly;
            txtAankoopprijs.ReadOnly = !txtAankoopprijs.ReadOnly;
            txtHuurprijs.ReadOnly = !txtHuurprijs.ReadOnly;
            txtOpmerking.ReadOnly = !txtOpmerking.ReadOnly;
            cmbCategorie.Enabled = !cmbCategorie.Enabled;
            cmbUitgever.Enabled = !cmbUitgever.Enabled;
            cmbBoekStatus.Enabled = !cmbBoekStatus.Enabled;
            cmbBoekSoort.Enabled = !cmbBoekSoort.Enabled;
            chkHuurboek.Enabled = !chkHuurboek.Enabled;
            
        }

        private void Wijzig_Click(object sender, EventArgs e)
        {
            this.switchEnabledModus();
            this.switchButtonModus();
            isnew = false;
            if (!isPlatoBoek && !chkIsBestelbaarBijPlato.Checked)
            {
                txtIsbnNr.Visible = false;
                lblIsbnNr.Visible = false;
            }
        }

        private void Annuleer_Click(object sender, EventArgs e)
        {
            if (isnew)
            {
                this.boekBindingSource.RemoveCurrent();
            }
            else
            {
                this.boekBindingSource.CancelEdit();
            }
            lblIsbnNr.Visible = true;
            txtIsbnNr.Visible = true;
            errorProvider1.Clear();
            this.switchEnabledModus();
            this.switchButtonModus();
            boekDataGridView.Focus();
        }

        private void Registreer_Click(object sender, EventArgs e)
        {

            DialogResult result = DialogResult.No;
            if (isnew)
                result = MessageBox.Show("Nieuw school artikel (NIET PLATO BOEK) registreren?", "Registreren nieuw artikel/boek?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            else
                result = MessageBox.Show("Artikel/Boek gegevens wijzigen?", "Registreren gewijzigde artikel/boek?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            lblIsbnNr.Visible = true;
            txtIsbnNr.Visible = true;
            if (result == DialogResult.Yes)
            {
                if (IsValide())
                {
                    //if ((isnew && !chkIsBestelbaarBijPlato.Checked) || (!isnew && !chkIsBestelbaarBijPlato.Checked  && !txtIsbnNr.Text.Equals(oudIsbnNr)))
                    if ((isnew && txtIsbnNr.Text.Length == 0) || (!isnew && !chkIsBestelbaarBijPlato.Checked && !txtIsbnNr.Text.Equals(oudIsbnNr)))
                    {
                        int hnr = (int)variaTableAdapter.getMaxIsbnNr() + 1;
                        variaTableAdapter.setMaxIsbnNr(hnr);
                        /*int hnr = InstParameters.Default.MaxIsbnNrSchoolboek + 1;
                        InstParameters.Default.MaxIsbnNrSchoolboek = hnr;
                        InstParameters.Default.Save();*/
                        this.boekDataGridView.CurrentRow.Cells["dataGridViewIsbnNr"].Value = "XXXXXXX" + hnr.ToString();
                    }
                    this.boekDataGridView.CurrentRow.Cells["dataGridViewUitgever"].Value = this.cmbUitgever.SelectedValue;
                    this.boekDataGridView.CurrentRow.Cells["dataGridViewCategorie"].Value = this.cmbCategorie.SelectedValue;
                    this.boekDataGridView.CurrentRow.Cells["dataGridViewBoekStatusCode"].Value = this.cmbBoekStatus.SelectedValue;
                    this.boekDataGridView.CurrentRow.Cells["dataGridViewBoeksoort"].Value = this.cmbBoekSoort.SelectedValue;
                    this.boekDataGridView.CurrentRow.Cells["dataGridViewHuurBoek"].Value = this.chkHuurboek.Checked;
                    this.boekDataGridView.CurrentRow.Cells["dataGridViewABoek"].Value = false;
                    this.boekBindingSource.EndEdit();
                    this.boekTableAdapter.Update(this.onsBoekenPakketDataSet.Boek);
                    this.switchEnabledModus();
                    this.switchButtonModus();
                    this.boekDataGridView.Refresh();
                }
            }
            else
            {
                this.boekBindingSource.CancelEdit();
                this.switchEnabledModus();
                this.switchButtonModus();
            }
            boekDataGridView.Focus();
        }

        public Boolean IsValide()
        {
            isValide = true;
            bool terug = true;
            bool res = txtTitel.Text.Length > 0;
            if (!res)
            {
                terug = false;
                this.errorProvider1.SetError(this.txtTitel, "Titel mag niet leeg zijn!!!");
            }
            else
            {
                this.errorProvider1.SetError(this.txtTitel, "");
                //terug = res;
            }
            if ((isnew || (!isnew && !oudIsbnNr.Equals(txtIsbnNr.Text))) && chkIsBestelbaarBijPlato.Checked)
            {
                if (txtIsbnNr.Text.Length != 13 && txtIsbnNr.Text.Length != 0)
                {
                    terug = false;
                    this.errorProvider1.SetError(this.txtIsbnNr, "Isbnnr moet ingevuld zijn! en 13 cijfers bevatten!!");
                }
                else
                {
                    if (isDubbelIsbnNr(txtIsbnNr.Text) && txtIsbnNr.Text.Length != 0)
                    {
                        terug = false;
                        this.errorProvider1.SetError(this.txtIsbnNr, "Isbnnr bestaat al voor een ander artikel!!!");
                    }
                    else
                    {
                        this.errorProvider1.SetError(this.txtIsbnNr, "");
                    }
                }
            }
            isValide = terug;
            return terug;
        }

        private void Nieuw_Click(object sender, EventArgs e)
        {
            isPlatoBoek = false;
            lblIsbnNr.Visible = false;
            txtIsbnNr.Visible = false;
            this.switchEnabledModus();
            this.switchButtonModus();
            this.boekBindingSource.AddNew();
            chkIsBestelbaarBijPlato.Checked = false;
            cmbUitgever.SelectedIndex = 0;
            cmbBoekStatus.SelectedIndex = 0;
            cmbCategorie.SelectedIndex = 0;
            cmbBoekSoort.SelectedIndex = 0;
            txtTitel.Focus();
            isnew = true;
        }

        private void RegistreerEnNieuw_Click(object sender, EventArgs e)
        {
            this.Registreer_Click(sender, e);
            if (isValide)
                this.Nieuw_Click(sender, e);
        }

        private void Wis_Click(object sender, EventArgs e)
        {
            string vTitel = boekDataGridView.CurrentRow.Cells["dgvTitel"].Value.ToString();
            int vBoekID = int.Parse(boekDataGridView.CurrentRow.Cells["dgvBoekID"].Value.ToString());
            bool magWissen = true;
            Text = "#### " + vBoekID + " #####";
            if (int.Parse(leerlingBoek_Leerling_BoekTableAdapter.CountByBoekID(vBoekID).ToString()) > 0)
            {
                magWissen = false;
                MessageBox.Show("Wissen van boek " + vTitel + " niet toegestaan!!!. Voor dit boek zijn er reeds bestellingen!!!", "WISSEN NIET TOEGESTAAN!!");
            }
            if (magWissen)
            {
                if (int.Parse(this.boeklijstItemTableAdapter.CountBoeklijstItemsByBoekID(vBoekID).ToString()) > 0)
                {
                    magWissen = false;
                    MessageBox.Show("Wissen van boek " + vTitel + " niet toegestaan!!!. Dit boek is reeds opgenomen in een boekenlijst!!!", "WISSEN NIET TOEGESTAAN!!");
                }
                if (magWissen)
                {
                    DialogResult result = DialogResult.No;
                    result = MessageBox.Show("Wens je het boek " + vTitel + " te wissen?", "Boek wissen?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (result == DialogResult.Yes)
                    {
                        boekBindingSource.RemoveCurrent();
                        boekBindingSource.EndEdit();
                        this.boekTableAdapter.Update(this.onsBoekenPakketDataSet.Boek);
                    }
                }
            }
        }

        private bool isDubbelIsbnNr(string vIsbnNr)
        {
            bool terug = false;
            terug = Database.Instance.GetDatabase.Boek_GetAantalByIsbnNr(vIsbnNr) > 0;
            return terug;
        }

        private void boekDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            //Dummy laten staan
        }

        private void btnIsbntest_Click(object sender, EventArgs e)
        {
            CategorieBeheren f = new CategorieBeheren(this);
            f.ShowDialog();
        }

        private void chkIsBestelbaarBijPlato_CheckedChanged(object sender, EventArgs e)
        {
            if (chkIsBestelbaarBijPlato.Checked)
            {
                txtIsbnNr.Visible = true;
                lblIsbnNr.Visible = true;
                lblIsbnrTekst.Text = "(Vul isbnnr van 13 cijfers in of laat blanco)";
            }
            else
            {
                txtIsbnNr.Visible = false;
                lblIsbnNr.Visible = false;
                lblIsbnrTekst.Text = "";
            }
        }


        public void refreshCategorie()
        {
            this.categorieTableAdapter.Fill(this.onsBoekenPakketDataSet.Categorie);
        }

        public void refreshUitgever()
        {
            this.uitgeverTableAdapter.Fill(this.onsBoekenPakketDataSet.Uitgever);
        }

        private void btnUitgever_Click(object sender, EventArgs e)
        {
            UitgeversBeheren f = new UitgeversBeheren(this);
            f.ShowDialog();
        }

        private void btnCategorie_Click(object sender, EventArgs e)
        {
            CategorieBeheren f = new CategorieBeheren(this);
            f.ShowDialog();
        }

        private void BoekBeheer_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (isStock)
            {
                try
                {
                    this.boekBindingSource.EndEdit();
                    this.boekTableAdapter.Update(this.onsBoekenPakketDataSet.Boek);
                }
                catch (Exception ex) { ;}
            }

        }

        private void btnVoorraad_Click(object sender, EventArgs e)
        {
            this.BoekBeheer_FormClosing(null, null);
        }

       
        protected override void btnActueleVoorraad_Click(object sender, EventArgs e)
        {
            BoekenLijst boekenLijst = new BoekenLijst("alle", "", "voorraad", "titel", false, false, false, false, false);
            string [,] info = boekenLijst.vulInfoArray();
            dgvVoorraadActueel.Visible = true;
            dgvVoorraadActueel.ReadOnly = true;
            int vBoekID = 0;
            int hsaldo = 0;
            bool gevonden = false;
            int lengte = boekDataGridView.Rows.Count;
            for (int z = 0; z < lengte; z++)
            {
                gevonden = false;
                try
                {
                    vBoekID = int.Parse(boekDataGridView.Rows[z].Cells["dgvBoekID"].Value.ToString());
                    for (int i = 0; i < info.GetLength(0); i++)
                    {
                        if (int.Parse(info[i, (int)j.boekid]) == vBoekID)
                        {
                            hsaldo = int.Parse(info[i, (int)j.voorraad]) +
                                  int.Parse(info[i, (int)j.platolever]) -
                                  int.Parse(info[i, (int)j.llafhaal]) -
                                  int.Parse(info[i, (int)j.platoretour]) +
                                  int.Parse(info[i, (int)j.llretour]);
                            boekDataGridView.Rows[z].Cells["dgvVoorraadActueel"].Value = hsaldo;
                            gevonden = true;
                            break;
                        }
                    }
                    if (!gevonden)
                        boekDataGridView.Rows[z].Cells["dgvVoorraadActueel"].Value = 0;
                }
                catch (Exception) { };
            }

            /*
            string basis = "";
            StringBuilder sb = new StringBuilder();
            string lijn = "";
            int aLijnen = 0;
            bool magDetailLijn = true;
            int hsaldo = 0;

            for (int i = 0; i < info.GetLength(0); i++)
            {
                magDetailLijn = true;
                basis = info[i, (int)j.boekid].PadRight(5) +
                        info[i, (int)j.isbn].PadRight(15) +
                        info[i, (int)j.titel].PadRight(70) +
                        info[i, (int)j.categorie].PadRight(6);
                aLijnen++;
                magDetailLijn = false;
                hsaldo = int.Parse(info[i, (int)j.voorraad]) +
                              int.Parse(info[i, (int)j.platolever]) -
                              int.Parse(info[i, (int)j.llafhaal]) -
                              int.Parse(info[i, (int)j.platoretour]) +
                              int.Parse(info[i, (int)j.llretour]);
                    
                magDetailLijn = true;
                lijn = basis + info[i, (int)j.voorraad].PadLeft(10) +
                                 info[i, (int)j.platolever].PadLeft(10) +
                                 info[i, (int)j.llafhaal].PadLeft(10) +
                                 info[i, (int)j.platoretour].PadLeft(10) +
                                 info[i, (int)j.llretour].PadLeft(10) +
                                 hsaldo.ToString().PadLeft(10) +
                                 Environment.NewLine;
                if (magDetailLijn) sb.Append(lijn);
            }
            MessageBox.Show(sb.ToString());
            */
        }

        




    }
}

